在 Visual Studio 中設定 GitLab 作為 NuGet Packages 來源
TLDR
- GitLab Package Registry 可作為私有 NuGet 套件庫,透過 GitLab CI/CD 自動化打包與發佈。
- 使用
dotnet nuget add source指令並搭配CI_JOB_TOKEN可在 Pipeline 中自動化發佈流程。 - 若發生
NU1101錯誤,通常是因為CI_JOB_TOKEN缺乏跨專案或跨群組的存取權限,需在 GitLab 的「Job token permissions」中進行設定。 - 在 Visual Studio 中,需使用具備
read_api權限的 Personal Access Token 進行驗證。 - 若 Visual Studio 反覆要求輸入憑證,請檢查
%AppData%\NuGet\NuGet.Config是否正確寫入<packageSourceCredentials>區塊。
設定 GitLab CI/CD 自動發佈
GitLab 並未提供直接上傳 .nupkg 檔案的 UI 介面,建議透過 GitLab CI/CD 實現自動化流程。以下為建議的 .gitlab-ci.yml 設定:
yaml
image: 'mcr.microsoft.com/dotnet/sdk:8.0'
stages:
- pack
- publish
variables:
NUGET_PACKAGES_DIRECTORY: '.nuget'
before_script:
- export PROJECT_FILE=$(find . -type f -name "*.csproj" | head -n 1)
- export PROJECT_DIR=$(dirname "$PROJECT_FILE")
- export PROJECT_NAME=$(basename "$PROJECT_FILE" .csproj)
- dotnet nuget add source "${CI_API_V4_URL}/groups/${PACKAGES_GROUP_ID}/-/packages/nuget/index.json" --name gitlab-packages --username gitlab-ci-token --password ${CI_JOB_TOKEN} --store-password-in-clear-text
pack:
stage: pack
tags:
- docker
script:
- dotnet pack $PROJECT_DIR --configuration Release --output $NUGET_PACKAGES_DIRECTORY
artifacts:
paths:
- $NUGET_PACKAGES_DIRECTORY/*.nupkg
publish:
stage: publish
tags:
- docker
script:
- dotnet nuget add source "${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/packages/nuget/index.json" --name gitlab-project --username gitlab-ci-token --password ${CI_JOB_TOKEN} --store-password-in-clear-text
- cd $NUGET_PACKAGES_DIRECTORY
- for pkg in *.nupkg; do dotnet nuget push "$pkg" --source gitlab-project; done處理 CI/CD 權限問題
什麼情況下會遇到這個問題:當專案需要引用其他專案的套件,或在 CI/CD 流程中執行 dotnet restore 時。
若執行時出現 error NU1101: Unable to find package,是因為 $CI_JOB_TOKEN 預設僅限存取自身專案。請依照以下步驟擴充權限:
- 前往「Settings」→「CI/CD」。
- 在「Job token permissions」區塊點擊「Add group or project」。
- 新增需要存取的群組或專案。
TIP
使用 --verbosity detailed 參數可以協助除錯,確認是否為權限不足導致無法解析相依套件。
在 Visual Studio 中設定 GitLab 套件來源
建立存取 Token
在 Visual Studio 中讀取私有套件,需建立 Personal Access Token:
- 進入「Preferences」→「Access Tokens」。
- 建立新 Token 並勾選
read_api權限。 - 複製並妥善保存 Token。
設定 Visual Studio
- 進入「工具」→「選項」→「NuGet 套件管理員」→「套件來源」。
- 加入 URL:
https://{GitLab Domain}/api/v4/groups/{Group 流水號}/-/packages/nuget/index.json。 - 系統提示時,帳號輸入 GitLab 帳號,密碼輸入剛才產生的 Token。
解決重複輸入憑證問題
什麼情況下會遇到這個問題:Visual Studio 無法正確將憑證寫入設定檔,導致每次開啟專案都需重新驗證。
若發生此狀況,請手動透過命令列將憑證寫入 NuGet 設定:
bash
dotnet nuget add source "https://{GitLab Domain}/api/v4/groups/{Group 流水號}/-/packages/nuget/index.json" --name=GitLab --username={GitLab 帳號} --password={Access Token}執行後,請檢查 %AppData%\NuGet\NuGet.Config 是否已包含 <packageSourceCredentials> 區塊。
異動歷程
- 初版文件建立。